// const getFunExecTime = (function () {
//   // 装饰器，在当前函数执行前先执行另一个函数
//   function decoratorBefore(fn, beforeFn) {
//     return function () {
//       const ret = beforeFn.apply(this, arguments)

//       // 在前一个函数中判断，不需要执行当前函数
//       if (ret !== false) {
//         fn.apply(this, arguments)
//       }
//     }
//   }

//   // 装饰器，在当前函数执行后执行另一个函数
//   function decoratorAfter(fn, afterFn) {
//     return function () {
//       fn.apply(this, arguments)
//       afterFn.apply(this, arguments)
//     }
//   }

//   // 执行次数
//   // const funTimes = {}

//   // 给fun添加装饰器，fun执行前后计时
//   return function (fun, funName) {
//     return decoratorAfter(
//       decoratorBefore(fun, function () {
//         // 执行前
//         console.time(funName)
//       }),
//       function () {
//         // 执行后
//         console.timeEnd(funName)
//       }
//     )
//   }
// })()
export function measure(target: any, name: any, descriptor: any) {
  const oldValue = descriptor.value
  descriptor.value = async function () {
    const start = Date.now()
    const ret = await oldValue.apply(this, arguments)
    console.log(`${name}执行耗时 ${Date.now() - start}ms`)
    return ret
  }

  return descriptor
}

// const someFunction1 = getFunExecTime(someFunction, 'someFunction')
// someFunction1()
// export default getFunExecTime

// function someFunction() {
//   for (let i = 0; i < 100000; ++i) {}
// }
